// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreTypes.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MovieSceneTrack.h"
#include "SmartMovieSceneSequenceExtensions.generated.h"

/**
 * Function library containing methods that should be hoisted onto UMovieSceneSequences for scripting purposes
 */
UCLASS()
class SMARTPYTHONEXTENSIONS_API USmartMovieSceneSequenceExtensions : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static TMap<int32, FGuid> SmGetAllSpawnableGuid(UMovieSceneSequence* Sequence);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static TMap<int32, FString> SmGetAllSpawnableName(UMovieSceneSequence* Sequence);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static TMap<int32, FString> SmRenameSpawnableByData(UMovieSceneSequence* Sequence, TMap<int32, FString> Data, bool level = false);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRenameSpawnableByGuid(UMovieSceneSequence* Sequence, FString Name, FGuid Guid);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRenameSpawnableByIndex(UMovieSceneSequence* Sequence, int32 Index, FString Name, bool level = false);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static void SmRemoveAllSpawnable(UMovieSceneSequence* Sequence);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRemoveTrack(UMovieSceneSequence* Sequence, UMovieSceneTrack* Track);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRemoveMasterTrack(UMovieSceneSequence* Sequence, UMovieSceneTrack* Track);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static void SmRemoveCameraCutTrack(UMovieSceneSequence* Sequence);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRemoveSpawnableByIndex(UMovieSceneSequence* Sequence, int32 Index);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRemoveSpawnableByGuid(UMovieSceneSequence* Sequence, FGuid Guid);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static bool SmRemovePossessableByGuid(UMovieSceneSequence* Sequence, FGuid Guid);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static void SmSetRange(UMovieSceneSequence* Sequence, int32 Start, int32 End, bool view = false);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static void SmSetPlaybackRange(UMovieSceneSequence* Sequence, int32 Start, int32 End);

	UFUNCTION(BlueprintCallable, Category = "Sequence", meta = (ScriptMethod))
	static TArray<int32> SmGetPlaybackRange(UMovieSceneSequence* Sequence);

};